home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / sun / reflect / Reflection.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  2.9 KB  |  194 lines

  1. package sun.reflect;
  2.  
  3. import java.lang.reflect.Field;
  4. import java.lang.reflect.Modifier;
  5. import java.util.Collections;
  6. import java.util.HashMap;
  7. import java.util.Map;
  8.  
  9. public class Reflection {
  10.    private static Map fieldFilterMap = Collections.synchronizedMap(new HashMap());
  11.  
  12.    public static native Class getCallerClass(int var0);
  13.  
  14.    private static native int getClassAccessFlags(Class var0);
  15.  
  16.    public static boolean quickCheckMemberAccess(Class var0, int var1) {
  17.       return Modifier.isPublic(getClassAccessFlags(var0) & var1);
  18.    }
  19.  
  20.    public static void ensureMemberAccess(Class var0, Class var1, Object var2, int var3) throws IllegalAccessException {
  21.       if (var0 != null && var1 != null) {
  22.          if (!verifyMemberAccess(var0, var1, var2, var3)) {
  23.             throw new IllegalAccessException("Class " + var0.getName() + " can not access a member of class " + var1.getName() + " with modifiers \"" + Modifier.toString(var3) + "\"");
  24.          }
  25.       } else {
  26.          throw new InternalError();
  27.       }
  28.    }
  29.  
  30.    public static boolean verifyMemberAccess(Class var0, Class var1, Object var2, int var3) {
  31.       boolean var4 = false;
  32.       boolean var5 = false;
  33.       if (var0 == var1) {
  34.          return true;
  35.       } else {
  36.          if (!Modifier.isPublic(getClassAccessFlags(var1))) {
  37.             var5 = isSameClassPackage(var0, var1);
  38.             var4 = true;
  39.             if (!var5) {
  40.                return false;
  41.             }
  42.          }
  43.  
  44.          if (Modifier.isPublic(var3)) {
  45.             return true;
  46.          } else {
  47.             boolean var6 = false;
  48.             if (Modifier.isProtected(var3) && isSubclassOf(var0, var1)) {
  49.                var6 = true;
  50.             }
  51.  
  52.             if (!var6 && !Modifier.isPrivate(var3)) {
  53.                if (!var4) {
  54.                   var5 = isSameClassPackage(var0, var1);
  55.                   var4 = true;
  56.                }
  57.  
  58.                if (var5) {
  59.                   var6 = true;
  60.                }
  61.             }
  62.  
  63.             if (!var6) {
  64.                return false;
  65.             } else {
  66.                if (Modifier.isProtected(var3)) {
  67.                   Class var7 = var2 == null ? var1 : var2.getClass();
  68.                   if (var7 != var0) {
  69.                      if (!var4) {
  70.                         var5 = isSameClassPackage(var0, var1);
  71.                         var4 = true;
  72.                      }
  73.  
  74.                      if (!var5 && !isSubclassOf(var7, var0)) {
  75.                         return false;
  76.                      }
  77.                   }
  78.                }
  79.  
  80.                return true;
  81.             }
  82.          }
  83.       }
  84.    }
  85.  
  86.    private static boolean isSameClassPackage(Class var0, Class var1) {
  87.       return isSameClassPackage(var0.getClassLoader(), var0.getName(), var1.getClassLoader(), var1.getName());
  88.    }
  89.  
  90.    private static boolean isSameClassPackage(ClassLoader var0, String var1, ClassLoader var2, String var3) {
  91.       if (var0 != var2) {
  92.          return false;
  93.       } else {
  94.          int var4 = var1.lastIndexOf(46);
  95.          int var5 = var3.lastIndexOf(46);
  96.          if (var4 != -1 && var5 != -1) {
  97.             int var6 = 0;
  98.             int var7 = 0;
  99.             if (var1.charAt(var6) == '[') {
  100.                do {
  101.                   ++var6;
  102.                } while(var1.charAt(var6) == '[');
  103.  
  104.                if (var1.charAt(var6) != 'L') {
  105.                   throw new InternalError("Illegal class name " + var1);
  106.                }
  107.             }
  108.  
  109.             if (var3.charAt(var7) == '[') {
  110.                do {
  111.                   ++var7;
  112.                } while(var3.charAt(var7) == '[');
  113.  
  114.                if (var3.charAt(var7) != 'L') {
  115.                   throw new InternalError("Illegal class name " + var3);
  116.                }
  117.             }
  118.  
  119.             int var8 = var4 - var6;
  120.             int var9 = var5 - var7;
  121.             return var8 != var9 ? false : var1.regionMatches(false, var6, var3, var7, var8);
  122.          } else {
  123.             return var4 == var5;
  124.          }
  125.       }
  126.    }
  127.  
  128.    static boolean isSubclassOf(Class var0, Class var1) {
  129.       while(var0 != null) {
  130.          if (var0 == var1) {
  131.             return true;
  132.          }
  133.  
  134.          var0 = var0.getSuperclass();
  135.       }
  136.  
  137.       return false;
  138.    }
  139.  
  140.    public static void registerFieldsToFilter(Class var0, String[] var1) {
  141.       fieldFilterMap.put(var0, var1);
  142.    }
  143.  
  144.    public static Field[] filterFields(Class var0, Field[] var1) {
  145.       if (fieldFilterMap == null) {
  146.          return var1;
  147.       } else {
  148.          String[] var2 = (String[])fieldFilterMap.get(var0);
  149.          if (var2 == null) {
  150.             return var1;
  151.          } else {
  152.             int var3 = 0;
  153.  
  154.             for(int var4 = 0; var4 < var1.length; ++var4) {
  155.                boolean var5 = false;
  156.                Field var6 = var1[var4];
  157.  
  158.                for(int var7 = 0; var7 < var2.length; ++var7) {
  159.                   if (var6.getName() == var2[var7]) {
  160.                      var5 = true;
  161.                      break;
  162.                   }
  163.                }
  164.  
  165.                if (!var5) {
  166.                   ++var3;
  167.                }
  168.             }
  169.  
  170.             Field[] var10 = new Field[var3];
  171.             int var11 = 0;
  172.  
  173.             for(int var12 = 0; var12 < var1.length; ++var12) {
  174.                boolean var13 = false;
  175.                Field var8 = var1[var12];
  176.  
  177.                for(int var9 = 0; var9 < var2.length; ++var9) {
  178.                   if (var8.getName() == var2[var9]) {
  179.                      var13 = true;
  180.                      break;
  181.                   }
  182.                }
  183.  
  184.                if (!var13) {
  185.                   var10[var11++] = var8;
  186.                }
  187.             }
  188.  
  189.             return var10;
  190.          }
  191.       }
  192.    }
  193. }
  194.